Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2016, 12:00
Новичок на форуме
Отправить личное сообщение для Lu_smith Посмотреть профиль Найти все сообщения от Lu_smith
 
Регистрация: 15.06.2016
Сообщений: 5

Отправить данные из file, hidden, text на сервер вне form и получить ответ AJAX/PHP
Здравствуйте, помогите пожалуйста.
Дано: разнотипные поля (hidden, submit, file) без формы <form>
Задача: с помощью js создать форму, закинуть в нее значения со всех данных полей, всё это передать файлу php ( а точнее в обработку php-скрипта, который находится в этом же файле), и вывести результат(ответ) php-скрипта на эту же страницу без перезагрузки.

Файл для загрузки - это excel
Все остальные поля тоже должны быть переданы в управление/обработку php
Тег <form> использовать нельзя/не надо.

Сделала скрипт, отдает ответ положительный, о том что всё передано, но в msg показы данные только с поля type=file, а в php ничего не приходит и не выводится.

Периодически ругается еще

"Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/."

Помогите пожалуйста.

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>

<div id="excelload">
	<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
	Выберите файл:
	<input name="userfile" id="load_file" type="file" value="" />
	<input type="submit" value="Загрузить" name="submit_load" id="submit_load" />
</div>

<p class="modal"></p>


<script>
$('#excelload #submit_load').click(function() {

var formData = new FormData();

formData.append('MAX_FILE_SIZE', $('#excelload input[type=hidden]').val());
formData.append('submit_load', $('#excelload input[type=submit]').val());
formData.append('userfile', $('#excelload input[type=file]')[0].files[0]);

/*var xhr = new XMLHttpRequest();
  xhr.open("POST", "<? echo $_SERVER['REQUEST_URI'] ?>", true);
  xhr.setRequestHeader('Content-Type', 'multipart/form-data;');
  xhr.send(formData);*/
 
$.ajax({
    type: "POST",
    url: "<? echo $_SERVER['REQUEST_URI'] ?>",
	//dataType: "json",
    data: formData,
	
    contentType: false,
    processData: false,
    success: function(msg) {
        $(".modal").html("<code>GooD!"+msg+"</code>");
    },
    error: function() {
        $(".modal").html("<pre>Sorry! Couldn't process your request.</pre>");
    }
});

});

</script>


<?php

if(isset($_POST['submit_load'])) {
	$data1 = $_FILES;
	$data1_name = $_FILES['userfile']['name'];
	
	$data2 = $_POST;
	
    echo json_encode($data1);
    echo json_encode($data1_name);
	
    echo json_encode($data2);
}

?>


</body>
</html>

Последний раз редактировалось Lu_smith, 15.06.2016 в 12:40.
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2016, 12:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

formData.append('MAX_FILE_SIZE', $('#excelload input[type=hidden]').val()); - зачем?
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2016, 13:02
Новичок на форуме
Отправить личное сообщение для Lu_smith Посмотреть профиль Найти все сообщения от Lu_smith
 
Регистрация: 15.06.2016
Сообщений: 5

Для дальнейшей обработки в php скрипте. Мне сейчас нужно чтобы php скрипт получил все данные с полей и просто вывел их в print_r, echo И т.д чтобы удостоверится что эти данные и вправду отправились и пришли.
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2016, 13:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Lu_smith
Для дальнейшей обработки в php скрипте.
Для какой обработки? Что это вообще и зачем? Если о макс. размер разрешенный для загрузки, то это сервер и так знает, а если для клиента, то этот параметр должен быть условием, а не гоняться скрытм полем.

Загрузка файлов - FileReader.
Ответить с цитированием
  #5 (permalink)  
Старый 15.06.2016, 13:31
Новичок на форуме
Отправить личное сообщение для Lu_smith Посмотреть профиль Найти все сообщения от Lu_smith
 
Регистрация: 15.06.2016
Сообщений: 5

Хорошо. MAX_FILE_SIZE здесь не нужен. Абстагируемся.
Мне нужно чтобы пхп получил все значения с полей, и вывел на эту страницу
<?php

if(isset($_POST['submit_load'])) {

    $data1_name = $_FILES['userfile']['name'];
    $data2 = $_POST;
	
    echo json_encode($data1_name);
    echo json_encode($data2);
}

?>
Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2016, 13:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А почему нельзя использовать форму? Чем опасен тег form?
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2016, 13:41
Новичок на форуме
Отправить личное сообщение для Lu_smith Посмотреть профиль Найти все сообщения от Lu_smith
 
Регистрация: 15.06.2016
Сообщений: 5

Потому что мне нужно именно так. Если бы мне нужно было использовать форму я бы так и сделала. Спасибо что пытаетесь помочь, но мне нужно решить эту задачу именно с таким Дано.
Ответить с цитированием
  #8 (permalink)  
Старый 15.06.2016, 14:02
Аватар для pureJS
Аспирант
Отправить личное сообщение для pureJS Посмотреть профиль Найти все сообщения от pureJS
 
Регистрация: 04.06.2016
Сообщений: 70

Lu_smith, сначала файл надо считать через FileReader и только потом отправить через AJAX. Подробно об отправке файлов через AJAX-POST читай тут (с примерами):
Новые возможности XMLHttpRequest2

Как считать через FileReader читай начиная вот отсюда.
Ответить с цитированием
  #9 (permalink)  
Старый 15.06.2016, 14:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну а зачем тогда input type="submit"?
Юмористы )

<?
if($_FILES) {
    exit(print_r($_FILES, 1));
}
?>
<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style>

</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script> 
$(function() {
    $('#f').change(function() {
        var f = new FormData();
        f.append(this.name, this.files[0])
        $.ajax({
            type: "POST",
            url: location,
            data: f,
            contentType: false,
            processData: false,
            success: function(msg) {
                alert(msg)
            },
            error: function() {
                //
            }
        });
    })
});
</script>     
</head> 

<body>
<input type="file" name="upl" id="f" />
</body> 
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 15.06.2016, 14:47
Новичок на форуме
Отправить личное сообщение для Lu_smith Посмотреть профиль Найти все сообщения от Lu_smith
 
Регистрация: 15.06.2016
Сообщений: 5

К сожалению данные файла не поступают в обработку php. Данные из "формы"/полей должны поступить в php. То есть в php код if($_FILES['userfile']['name'] != '') или if($_POST != 0) в этих переменных должны лежать данные с полей, и, при условии что в эти переменные действительно чтото пришло, выполнится последующий php код (загрузить/изменить/ и т.д) и далее при успешном выполнеии php, на страницу вывести слово/текст с помощью Ajax.
Извините, если не совсем понятно выражаюсь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как собрать все данные из таблицы, и отправить массив на сервер optsar AJAX и COMET 14 11.12.2015 07:58
Как отправить данные в Form Data вместо Request Payload? Shitbox2 Angular.js 2 26.05.2013 22:40
Идея сайта... Стоит двигацца дальше?! B-Vladi Ваши сайты и скрипты 313 16.12.2011 01:04
Вывод порядкового номера li в списке profxhtml Общие вопросы Javascript 4 13.04.2011 12:30
как создать елемент с вложеными елементами scuter Events/DOM/Window 11 14.05.2008 16:15